// 导入axios
import axios from "axios";

// 导入store
import store from "@/store/index";

// 导入路由
import router from "@/router/index";

//导入token的时间
import { getTime } from "@/utils/auth";

// 导入提示
import { Message } from "element-ui";

// 配置基地址
const http = axios.create({
  // baseURL: "/api",
  // 使用环境变量
  baseURL: process.env.VUE_APP_BASEURL,
  timeout: 5000, //超时报错
});

// 设置一个token过期的时间
const myTime = 30*60*10000;

// 设置请求拦截器
http.interceptors.request.use(
  (config) => {
    // 判断获取到token的时间与当前时间的间隔
    const space = Date.now() - getTime();
    // 判断如果间隔时间大于过期时间则token过期
    if (space >= myTime) {
      // 提示用户
      Message.error('登录信息失效!')
       // 删除token和用户信息
       store.dispatch("user/LogOut");
      // 退出登录
      router.push("/login");
      // 返回报错信息
      return Promise.reject(new Error("登录信息失效"));
    }

    // 获取到getters中的token,又快速访问通道直接从getters中获取
    const token = store.getters.token;
    if (token) {
      // 请求头中携带token跳转
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (err) => {
    return Promise.reject(err);
  }
);
// 设置响应拦截器
http.interceptors.response.use(
  (response) => {
    // 用对象解构赋值取出里面的success和message
    const { success, message } = response.data;
    // 判断success的状态
    if (success) {
      // 为true返回数据
      return response;
    } else {
      // 如果相反返回报错信息
      return Promise.reject(new Error(message));
    }
  },
  (err) => {
    // 被动处理token的过期
    // // 判断以下的值有一个满足就执行以下代码
    // if (err.response && err.response.data && err.response.data.code === 10002) {
    //   // 提示用户
    //   Message({ message: err.response.data.message, type: "error" });
    //   // 删除旧的token和用户信息
    //   store.dispatch("user/LogOut");
    //   // 跳转到登录页
    //   router.push("/login");
    // }
    return Promise.reject(err);
  }
);

// 暴露http
export default http;
